package org.ehe.business.supplier.domain.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * 更新供应商DTO
 * @author :zhangnn
 * @className :SupplierInfoUpdateDTO
 * @description: TODO
 * @date 2025-07-23 09:34:55
 */
@Data
public class SupplierInfoUpdateDTO {
    /**
     * 供应商ID
     */
    @NotNull(message = "供应商ID不能为空")
    private Long id;

    /**
     * 供应商名称
     */
    @Size(max = 200, message = "供应商名称长度不能超过200个字符")
    private String supplierName;

    // ============== 基本信息字段 ==============
    /**
     * 开户行
     */
    @Size(max = 100, message = "开户行名称长度不能超过100个字符")
    private String bankName;

    /**
     * 收款账户
     */
    @Size(max = 50, message = "收款账户长度不能超过50个字符")
    private String bankAccount;

    /**
     * 税种
     */
    @Size(max = 50, message = "税种长度不能超过50个字符")
    private String taxType;

    /**
     * 税率(%)
     */
    private BigDecimal taxRate;

    /**
     * 供应产品类别
     */
    @Size(max = 100, message = "供应产品类别长度不能超过100个字符")
    private String productCategory;

    /**
     * 当前等级
     */
    @Size(max = 50, message = "当前等级长度不能超过50个字符")
    private String currentLevel;

    private String contactRegionCode;
    /**
     * 联系地址(省/市/区)
     */
    @Size(max = 100, message = "联系地址长度不能超过100个字符")
    private String contactRegion;

    /**
     * 详细地址
     */
    @Size(max = 500, message = "详细地址长度不能超过500个字符")
    private String detailedAddress;

    // ============== 营业执照信息 ==============
    /**
     * 社会信用代码
     */
    @Size(max = 50, message = "社会信用代码长度不能超过50个字符")
    private String socialCreditCode;

    /**
     * 营业执照-单位名称
     */
    @Size(max = 200, message = "单位名称长度不能超过200个字符")
    private String companyName;

    /**
     * 法定代表人
     */
    @Size(max = 100, message = "法定代表人姓名长度不能超过100个字符")
    private String legalPerson;

    /**
     * 注册地址
     */
    @Size(max = 500, message = "注册地址长度不能超过500个字符")
    private String registeredAddress;

    /**
     * 经营范围
     */
    private String businessScope;

    /**
     * 注册资本
     */
    @Size(max = 100, message = "注册资本长度不能超过100个字符")
    private String registeredCapital;

    // ============== 联系信息 ==============
    /**
     * 联系人
     */
    @Size(max = 100, message = "联系人姓名长度不能超过100个字符")
    private String contactPerson;

    /**
     * 联系电话
     */
    @Size(max = 20, message = "联系电话长度不能超过20个字符")
    private String contactPhone;

    /**
     * 联系邮箱
     */
    @Email(message = "邮箱格式不正确")
    @Size(max = 100, message = "联系邮箱长度不能超过100个字符")
    private String contactEmail;

    /**
     * 传真号码
     */
    @Size(max = 20, message = "传真号码长度不能超过20个字符")
    private String fax;

    /**
     * 官方网站
     */
    @Size(max = 200, message = "官方网站长度不能超过200个字符")
    private String website;

    // ============== 业务信息 ==============
    /**
     * 合作开始日期
     */
    private LocalDate cooperationStartDate;

    /**
     * 最后合作日期
     */
    private LocalDate lastCooperationDate;

    /**
     * 信用等级
     */
    @Size(max = 20, message = "信用等级长度不能超过20个字符")
    private String creditRating;

    /**
     * 付款条件
     */
    @Size(max = 100, message = "付款条件长度不能超过100个字符")
    private String paymentTerms;

    /**
     * 交货周期(天)
     */
    private Integer deliveryCycle;

    /**
     * 质量等级
     */
    @Size(max = 20, message = "质量等级长度不能超过20个字符")
    private String qualityGrade;

    /**
     * 供应商状态(0:停用 1:启用)
     */
    private Integer supplierStatus;

    // ============== 分类信息 ==============
    /**
     * 分类ID列表
     */
    private String categoryIds;

    /**
     * 备注
     */
    @Size(max = 1000, message = "备注长度不能超过1000个字符")
    private String remark;

    /**
     * 版本号(乐观锁)
     */
    @NotNull(message = "版本号不能为空")
    private Integer version;
}
